// app.ts
App<IAppOption | any>({
  globalData: {
    isLogin: false,
  },
  onLaunch() {
    wx.cloud.init();
  },
  onLogin(value: boolean) {
    // 用户登录成功后通知实例更改登录状态
    this.globalData.isLogin = value;
  },
  async request(obj, loading = true, number = 0) {
    const that = this;
    if (that.cloud == null) {
      that.cloud = new wx.cloud.Cloud({
        resourceAppid: "wxec3d03aee0f9ed95", // 微信云托管环境所属账号，服务商appid、公众号或小程序appid
        resourceEnv: "prod-3g62zoxy18955f96", // 微信云托管的环境ID
      });
      await that.cloud.init(); // init过程是异步的，需要等待init完成才可以发起调用
    }
    try {
      if (loading) {
        wx.showLoading({
          title: "加载中",
        });
      }
      const result = await that.cloud.callContainer({
        path: obj.path, // 填入业务自定义路径和参数，根目录，就是 /
        method: obj.method || "GET", // 按照自己的业务开发，选择对应的方法
        // dataType:'text', // 如果返回的不是json格式，需要添加此项
        header: {
          "X-WX-SERVICE": "springboot-kqhd", // xxx中填入服务名称（微信云托管 - 服务管理 - 服务列表 - 服务名称）
          // 其他header参数
        },
        data: obj.data,
        // 其余参数同 wx.request
      });
      if (result.data.code !== "200") {
        wx.showToast({
          title: result.data.msg,
          icon: "none",
        });
        throw new Error(`${result.data.msg}`);
      }
      if (loading) {
        wx.hideLoading();
      }
      return result.data.data; // 业务数据在data中
    } catch (e) {
      const error = e.toString();
      // 如果错误信息为未初始化，则等待300ms再次尝试，因为init过程是异步的
      if (error.indexOf("Cloud API isn't enabled") != -1 && number < 3) {
        return new Promise((resolve) => {
          setTimeout(function () {
            resolve(that.request(obj, number + 1));
          }, 300);
        });
      } else {
        wx.showToast({
          title: error,
          icon: "none",
        });
        throw new Error(`微信云托管调用失败${error}`);
      }
    } finally {
      if (loading) {
        wx.hideLoading();
      }
    }
  },
});
